﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ForrajeriaDB;
using ForrajeriaBCL;

namespace ForrajeriaFRONT.ABM
{
    public partial class Proveedor : System.Web.UI.Page
    {
        private ProveedorBCL objBC;
        private ProveedorMO objEditar;


        public Proveedor()//Constructor
        {
            objBC = new ProveedorBCL();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ((Label)this.Master.FindControl("lblTitulo")).Text = "Proveedores";

                ddlProvincia.Items.Add(new ListItem("-- Seleccione --", "0"));
                ProvinciaBCL objProvincia = new ProvinciaBCL();
                List<ProvinciaMO> listaProvincia = objProvincia.GetALL();

                foreach (ProvinciaMO aux in listaProvincia)
                {
                    ddlProvincia.Items.Add(new ListItem(aux.Nombre, aux.CodigoProvincia.ToString()));
                }
                ddlProvincia.DataBind();
                ddlProvincia.SelectedIndex = 0;

                ViewState["ProveedorOriginal"] = null;

                cargaPanelBusca();
            }
        }

        protected void gvProveedor_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            objEditar = new ProveedorMO();
            objEditar.CodigoProveedor = (int)gvProveedor.DataKeys[e.RowIndex].Values["CodigoProveedor"];
            string resu = objBC.Eliminar(objEditar);
            if (resu == "1")
            {
                mensaje.Text = "Eliminado Correctamente";
                mensaje.ForeColor = System.Drawing.Color.Blue;
                valSumary.ShowSummary = true;
            }
            else
            {
                mensaje.ForeColor = System.Drawing.Color.Red;
                valSumary.ShowSummary = true;
                mensaje.Text = resu;
            }
            mensaje.Visible = true;
            gvProveedor.Visible = false;
        }

        protected void gvProveedor_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {

            int ind=e.NewSelectedIndex;
            if (ind != -1)
            {
                
                objEditar = new ProveedorMO();
                objEditar.RazonSocial = gvProveedor.Rows[ind].Cells[0].Text;
                objEditar.CuitCuil = gvProveedor.Rows[ind].Cells[1].Text;
                objEditar.Telefono = gvProveedor.Rows[ind].Cells[2].Text;
                objEditar.CodigoProveedor = (int)gvProveedor.DataKeys[ind].Values["CodigoProveedor"];
                objEditar.Mail = gvProveedor.DataKeys[ind].Values["Mail"].ToString();
                objEditar.Calle = gvProveedor.DataKeys[ind].Values["Calle"].ToString();
                objEditar.Nro = (int)gvProveedor.DataKeys[ind].Values["Nro"];
                objEditar.Piso = gvProveedor.DataKeys[ind].Values["Piso"].ToString();
                objEditar.Dpto = gvProveedor.DataKeys[ind].Values["Dpto"].ToString();
                objEditar.Id_localidad = (int)gvProveedor.DataKeys[ind].Values["Id_Localidad"];
                objEditar.Estado = "A";

                lblCodigoProveedor.Text = objEditar.CodigoProveedor.ToString();
                ViewState["ProveedorOriginal"] = objEditar;

                txtRazonSocial.Text = objEditar.RazonSocial;
                txtCuit.Text = objEditar.CuitCuil;
                txtTelefono.Text = objEditar.Telefono;
                txtMail.Text = objEditar.Mail;
                txtCalle.Text = objEditar.Calle;
                txtNumeroCalle.Text = objEditar.Nro.ToString();
                txtPiso.Text = objEditar.Piso;
                txtDepartamento.Text = objEditar.Dpto;


                cargaPanelCarga();


                int localidad = int.Parse(objEditar.Id_localidad.ToString());
                int provincia = buscarProvincia(localidad);

                ddlProvincia.SelectedValue = provincia.ToString();
                ddlProvincia_SelectedIndexChanged(null, null);
                ddlLocalidad.SelectedValue = localidad.ToString();
            }
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            modoVentana("nuevo");
            cargaPanelCarga();
        }
        public int buscarProvincia(int idLocalidad)
        {
            LocalidadBCL objLocalidad = new LocalidadBCL();
            return objLocalidad.GetProvinciaDeLocalidad(idLocalidad);

        }

        protected void cus_Localidad_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (ddlLocalidad.SelectedIndex >= 1)
            {
                args.IsValid = true;
            }
            else
            {
                args.IsValid = false;
            }

        }

        protected void cus_Provincia_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (ddlProvincia.SelectedIndex >= 1)
            {
                args.IsValid = true;
            }
            else
            {
                args.IsValid = false;
            }

        }
        

        protected void ddlProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlLocalidad.Enabled = false;
            ddlLocalidad.Items.Clear();

            if (ddlProvincia.SelectedIndex != 0)
            {
                ddlLocalidad.Items.Add(new ListItem("-- Seleccione --", "0"));
                LocalidadBCL objLoc = new LocalidadBCL();
                List<LocalidadMO> listaLocalidad = objLoc.GetAll(int.Parse(ddlProvincia.SelectedValue));

                foreach (LocalidadMO aux in listaLocalidad)
                {
                    ddlLocalidad.Items.Add(new ListItem(aux.Nombre, aux.Id_localidad.ToString()));
                }
                ddlLocalidad.DataBind();
                ddlLocalidad.Enabled = true;
            }

        }
        protected void btnGuardar_Click(object sender, EventArgs e)
        {

            if (!Page.IsValid) return;

            objEditar = new ProveedorMO();
            objEditar = (ProveedorMO)ViewState["ProveedorOriginal"];

            if (objEditar == null)
            {
                objEditar = new ProveedorMO();
                objEditar.RazonSocial = txtRazonSocial.Text;
                objEditar.CuitCuil = txtCuit.Text;
                objEditar.Telefono = txtTelefono.Text;
                objEditar.Mail = txtMail.Text; ;
                objEditar.Calle = txtCalle.Text;
                if(!string.IsNullOrWhiteSpace(txtNumeroCalle.Text))
                {
                    objEditar.Nro = int.Parse(txtNumeroCalle.Text);
                }else
                {
                    objEditar.Nro=null;
                }
                objEditar.Piso = txtPiso.Text;
                objEditar.Dpto = txtDepartamento.Text;
                objEditar.Id_localidad = int.Parse(ddlLocalidad.SelectedValue);
                objEditar.Estado = "A";

                string resu;
                resu = objBC.Adicionar(objEditar);
                if (resu == "1")
                {
                    mensaje.ForeColor = System.Drawing.Color.Blue;
                    valSumary.ShowSummary = true;
                    mensaje.Text = "Guardado con Exito";

                }
                else
                {
                    mensaje.ForeColor = System.Drawing.Color.Red;
                    valSumary.ShowSummary = true;
                    mensaje.Text = resu;


                }


            }
            else //UPDATE
            {
                ProveedorMO objActual = new ProveedorMO();

                objActual.CodigoProveedor = objEditar.CodigoProveedor;
                objActual.RazonSocial = txtRazonSocial.Text;
                objActual.CuitCuil = txtCuit.Text;
                objActual.Telefono = txtTelefono.Text;
                objActual.Mail = txtMail.Text; ;
                objActual.Calle = txtCalle.Text;
                objActual.Nro = int.Parse(txtNumeroCalle.Text);
                objActual.Piso = txtPiso.Text;
                objActual.Dpto = txtDepartamento.Text;
                objActual.Id_localidad = int.Parse(ddlLocalidad.SelectedValue);
                objActual.Estado = "A";

                string resu;
                resu = objBC.Actualizar(objActual, objEditar);
                if (resu == "1")
                {
                    mensaje.ForeColor = System.Drawing.Color.Blue;
                    valSumary.ShowSummary = true;
                    mensaje.Text = "Guardado con Exito";

                }
                else
                {
                    mensaje.ForeColor = System.Drawing.Color.Red;
                    valSumary.ShowSummary = true;
                    mensaje.Text = resu;

                }

            }
            ViewState["ProveedorOriginal"] = null;
            cargaPanelBusca();
            mensaje.Visible = true;
        }

       
        public void CleanControl(ControlCollection controles)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Text = string.Empty;
                else if (control is DropDownList)
                    ((DropDownList)control).ClearSelection();
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).ClearSelection();
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).ClearSelection();
                else if (control is RadioButton)
                    ((RadioButton)control).Checked = false;
                else if (control is CheckBox)
                    ((CheckBox)control).Checked = false;
                else if (control.HasControls())
                    CleanControl(control.Controls);
            }
        }

        public void ControlState(ControlCollection controles, Boolean estado)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Enabled = estado;
                else if (control is DropDownList)
                    ((DropDownList)control).Enabled = estado;
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).Enabled = estado;
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).Enabled = estado;
                else if (control is RadioButton)
                    ((RadioButton)control).Enabled = estado;
                else if (control is CheckBox)
                    ((CheckBox)control).Enabled = estado;
                else if (control.HasControls())
                    ControlState(control.Controls, estado);
            }
        }

        protected void modoVentana(string modo)
        {
            switch (modo)
            {
                case "nuevo":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, true);
                    mensaje.Visible = false;
                    break;
                case "busqueda":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, false);
                    mensaje.Visible = false;
                    break;
                case "edicion":
                    ControlState(this.Controls, true);
                    mensaje.Visible = false;
                    break;

                case "bloqueado":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, false);
                    break;
            }
        }

        protected void btnBuscar2_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid) return;

            string razon = "";
            string cuit = "";
            string telefono = "";

            if (!string.IsNullOrWhiteSpace(txtRazonSocial.Text))
            { razon = txtRazonSocial2.Text; }

            if (!string.IsNullOrWhiteSpace(txtCuit2.Text))
            { cuit=txtCuit2.Text; }

            if (!string.IsNullOrWhiteSpace(txtTelefono2.Text))
            { telefono = txtTelefono2.Text; }

            CleanControl(this.Controls);
            mensaje.Visible = false;
            gvProveedor.DataSource = null;
            gvProveedor.DataSource = objBC.buscarProveedor(razon,cuit,telefono);
            gvProveedor.DataBind();
            gvProveedor.Visible = true;
            gvProveedor.SelectedIndex = -1;
        }



        protected void cargaPanelBusca()
        {
            panelBusca.Visible = true;
            panelCarga.Visible = false;
            gvProveedor.Visible = false;
            mensaje.Visible = false;
        }
        protected void cargaPanelCarga()
        {
            panelBusca.Visible = false;
            panelCarga.Visible = true;
        }

        protected void btnLimpiar_Click(object sender, EventArgs e)
        {
            CleanControl(this.Controls);
        }

        protected void btnVolver_Click(object sender, EventArgs e)
        {
            CleanControl(this.Controls);
            cargaPanelBusca();

        }

        protected void btnRegForrajes_Click(object sender, EventArgs e)
        {
            cargarPanelProvXForraje();
        }

        private void cargarPanelProvXForraje()
        {
            panelBusca.Visible = false;
            panelCarga.Visible = false;
            panelForraje.Visible = true;

            ForrajeBCL forraje = new ForrajeBCL();
            List<ForrajeMO> lista = forraje.GetAll();

            foreach (ForrajeMO aux in lista)
            {
                ddlForraje.Items.Add(new ListItem(aux.NombreForraje, aux.CodigoForraje.ToString()));
            }
            ddlForraje.DataBind();
            ddlForraje.SelectedIndex = 0;

            cargarListaProvXForraje();
        }

        private void cargarListaProvXForraje()
        {
            ProveedorBCL prov = new ProveedorBCL();
            List< ProveedorXForrajeMO > lista = new List<ProveedorXForrajeMO>();
              lista=  prov.buscarForrajesProv(int.Parse(lblCodigoProveedor.Text));
              gvProvXForraje.DataSource = lista;
              gvProvXForraje.DataBind();
              gvProvXForraje.SelectedIndex = -1;
        }

        protected void btnAgregaPXF_Click(object sender, EventArgs e)
        {
            ProveedorXForrajeMO pXf = new ProveedorXForrajeMO();
            pXf.CodigoForraje = int.Parse(lblCodigoProveedor.Text);
            pXf.CodigoForraje = int.Parse(ddlForraje.SelectedValue);
            if(!string.IsNullOrWhiteSpace(txtPrecioPXF.Text))
                pXf.PrecioDeCompra=double.Parse(txtPrecioPXF.Text);


            
            ProveedorBCL prov = new ProveedorBCL();
            prov.AdicionarProvXForraje(pXf);
            txtPrecioPXF.Text = "";
            cargarListaProvXForraje();
        }

        protected void gvProvXForraje_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {
            int ind = e.NewSelectedIndex;
            txtPrecioPXF.Text = gvProvXForraje.Rows[ind].Cells[1].Text;
            ddlForraje.SelectedValue = gvProvXForraje.Rows[ind].Cells[0].Text;
        }

        protected void gvProvXForraje_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            int ind=e.RowIndex;
            ProveedorXForrajeMO p = new ProveedorXForrajeMO();
            p.CodigoForraje = int.Parse(gvProvXForraje.Rows[ind].Cells[0].Text);
            p.CodigoProveedor = int.Parse(lblCodigoProveedor.Text);
            ProveedorBCL prov = new ProveedorBCL();
            prov.EliminarProvXForraje(p);
        }
    }
}